/**
 * 版权所有(C)，上海勾芒信息科技，2017，所有权利保留。
 * 
 * 项目名：	cards-web
 * 文件名：	ActivateMemberForm.java
 * 模块说明：	
 * 修改历史：
 * 2017年4月4日 - Debenson - 创建。
 */
package me.chanjar.weixin.mp.bean.card;

import java.io.Serializable;
import java.util.List;

import com.fasterxml.jackson.annotation.JsonProperty;

/**
 * 设置开卡字段请求数据。
 * 
 * @author Debenson
 * @since 0.1
 */
public class ActivateMemberForm implements Serializable {
  private static final long serialVersionUID = 2942440486677650595L;

  /** 卡券ID */
  @JsonProperty("card_id")
  private String cardId;
  /** 会员卡激活时的必填选项 */
  @JsonProperty("required_form")
  private FormField requiredForm;
  /** 会员卡激活时的选填项 */
  @JsonProperty("optional_form")
  private FormField optionalForm;
  /** 绑定老会员链接 */
  @JsonProperty("bind_old_card")
  private NameUrl bindOldCard;
  /**
   * 服务声明，用于放置商户会员卡守 则
   */
  @JsonProperty("service_statement")
  private NameUrl serviceStatement;

  public String getCardId() {
    return cardId;
  }

  public void setCardId(String cardId) {
    this.cardId = cardId;
  }

  public FormField getRequiredForm() {
    return requiredForm;
  }

  public void setRequiredForm(FormField requiredForm) {
    this.requiredForm = requiredForm;
  }

  public NameUrl getBindOldCard() {
    return bindOldCard;
  }

  public void setBindOldCard(NameUrl bindOldCard) {
    this.bindOldCard = bindOldCard;
  }

  public NameUrl getServiceStatement() {
    return serviceStatement;
  }

  public void setServiceStatement(NameUrl serviceStatement) {
    this.serviceStatement = serviceStatement;
  }

  /**
   * 会员卡激活时的字段配置。
   * 
   * @author Debenson
   * @since 0.1
   */
  public static class FormField implements Serializable {
    private static final long serialVersionUID = -1100106829460239666L;

    /** 的字段是否允许用户激活后再次修改，商户设置为true时，需要接收相应事件通知处理修改事件 */
    @JsonProperty("can_modify")
    private Boolean canModify;
    /** 微信格式化的选项类型 */
    @JsonProperty("common_field_id_list")
    private List<CommonFieldID> commonFieldIds;
    /**
     * 自定义选项名称，开发者可 以分别在必填和选填中至多定义五个自定义选项
     */
    @JsonProperty("custom_field_list")
    private List<String> customFields;
    /** 自定义富文本类型，包含以下三个字段，开发者可 以分别在必填和选填中至多定义五个自定义选项 */
    @JsonProperty("rich_field_list")
    private List<RichField> richFields;

    public Boolean getCanModify() {
      return canModify;
    }

    public void setCanModify(Boolean canModify) {
      this.canModify = canModify;
    }

    public List<CommonFieldID> getCommonFieldIds() {
      return commonFieldIds;
    }

    public void setCommonFieldIds(List<CommonFieldID> commonFieldIds) {
      this.commonFieldIds = commonFieldIds;
    }

    public List<String> getCustomFields() {
      return customFields;
    }

    public void setCustomFields(List<String> customFields) {
      this.customFields = customFields;
    }

    public List<RichField> getRichFields() {
      return richFields;
    }

    public void setRichFields(List<RichField> richFields) {
      this.richFields = richFields;
    }

  }

  /**
   * 自定义富文本类型，包含以下三个字段，开发者可 以分别在必填和选填中至多定义五个自定义选项
   * 
   * @author Debenson
   * @since 0.1
   */
  public static class RichField implements Serializable {
    private static final long serialVersionUID = -3553391890853038756L;

    /** 富文本类型 */
    private RichFieldType type;
    /** 字段名 */
    private String name;
    /** 选择项 */
    private List<String> values;

    public RichField() {
    }

    public RichField(RichFieldType type, String name, List<String> values) {
      this.type = type;
      this.name = name;
      this.values = values;
    }

    public RichFieldType getType() {
      return type;
    }

    public void setType(RichFieldType type) {
      this.type = type;
    }

    public String getName() {
      return name;
    }

    public void setName(String name) {
      this.name = name;
    }

    public List<String> getValues() {
      return values;
    }

    public void setValues(List<String> values) {
      this.values = values;
    }

  }

  /**
   * 富文本类型
   * 
   * @author Debenson
   * @since 0.1
   */
  public static enum RichFieldType {
    FORM_FIELD_RADIO, // 自定义单选
    FORM_FIELD_SELECT, // 自定义选择项
    FORM_FIELD_CHECK_BOX,// 自定义多选
  }

  /**
   * 微信格式化的选项类型
   * 
   * @author Debenson
   * @since 0.1
   */
  public static enum CommonFieldID {
    USER_FORM_INFO_FLAG_MOBILE, // 手机号
    USER_FORM_INFO_FLAG_SEX, // 性别
    USER_FORM_INFO_FLAG_NAME, // 姓名
    USER_FORM_INFO_FLAG_BIRTHDAY, // 生日
    USER_FORM_INFO_FLAG_IDCARD, // 身份证
    USER_FORM_INFO_FLAG_EMAIL, // 邮箱
    USER_FORM_INFO_FLAG_LOCATION, // 详细地址
    USER_FORM_INFO_FLAG_EDUCATION_BACKGRO, // 教育背景
    USER_FORM_INFO_FLAG_INDUSTRY, // 行业
    USER_FORM_INFO_FLAG_INCOME, // 收入
    USER_FORM_INFO_FLAG_HABIT,// 兴趣爱好
  }

  /**
   * NAME + URL
   * 
   * @author Debenson
   * @since 0.1
   */
  public static class NameUrl implements Serializable {
    private static final long serialVersionUID = 3366591313301965575L;

    /** 链接名称 */
    private String name;
    /**
     * 自定义url 请填写http:// 或者https://开头的链接
     */
    private String url;

    public NameUrl() {
    }

    public NameUrl(String name, String url) {
      this.name = name;
      this.url = url;
    }

    public String getName() {
      return name;
    }

    public void setName(String name) {
      this.name = name;
    }

    public String getUrl() {
      return url;
    }

    public void setUrl(String url) {
      this.url = url;
    }
  }

}
